home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_1 / partial.fra < prev    next >
Text File  |  1995-03-23  |  5KB  |  281 lines

  1. Subject: Partial Fractions in the form y(x)=f(x)/g(x)
  2.  
  3.                        Partial Fractions
  4.                        -----------------
  5.  
  6. This is a program that will part a fraction of the form y(x)=f(x)/g(x)
  7. into partial fractions. f(x) and g(x) must satisfy the following 
  8. conditions: 
  9.  
  10. f(x) and g(x) are polynomials with real coefficients. The degree of f(x)
  11. is lower than that of g(x).
  12. The independant variable must always be X.
  13.  
  14. The following factors may be used in the denominator:
  15.  X
  16.  X^n
  17.  (X+-a)
  18.  (X+-a)^n
  19.  (X^2+-a)
  20.  (X^2+-a)^n
  21.  (X^2+-a*X+-b)
  22.  (X^2+-a*X+-b)^n
  23. where n=positive integer
  24.       a=b=real
  25.  
  26. Usage:
  27. ------
  28. Put fraction on stack and run 'DEL'. The result will be returned to
  29. level 1 and execution time to level 2.
  30.  
  31. The program will ignore coefficients smaller than 'KZ'. Default value
  32. is 0.00001, and may be changed if very small coefficients are to be
  33. expected. In that case, you should use 'EXDEL'  which calls an iterative
  34. routine using the RSD-function when solving the matrix.
  35.  
  36. How it works:
  37. -------------
  38. It insert values and then solves the resultant matrix. A long story...
  39.  
  40.  
  41. Examples:
  42. ---------
  43. Try these to check the program:
  44.  
  45.   '(X^3-7*X^2+14*X-9)/((X-1)^2*(X-2)^3)'
  46.  
  47.   '(X^4*(2*X+1)+X*(7*X^2+14*X+28))/(X^4*(X^2+2*X+4))'
  48.  
  49.  
  50. -----------------------CUT---------------------------------------------
  51. %%HP: T(3)A(D)F(.);
  52. DIR
  53.   DEL
  54.     \<< \-> b
  55.       \<< CLEAR TICKS
  56. -3 CF 'X' PURGE { }
  57. b
  58.         IF OBJ\->
  59. \->STR "/" \=/
  60.         THEN CLEAR
  61. "Error" KILL
  62.         ELSE DROP
  63. SWAP DROP
  64.         END
  65.         WHILE DUP
  66.           IFERR
  67. OBJ\->
  68.           THEN ""
  69. ""
  70.           ELSE SWAP
  71. DROP
  72.           END \->STR
  73. "*" ==
  74.         REPEAT ROT
  75. DROP ROT + SWAP
  76.         END DROP2 +
  77. { } { } 3 PICK 1
  78. OVER SIZE
  79.         FOR x x GET
  80.           CASE DUP
  81. 'X' SAME
  82.             THEN
  83. ROT SWAP + SWAP 0 +
  84.             END DUP
  85. OBJ\-> SWAP DROP \->STR
  86. "^" \=/
  87.             THEN
  88. DROP2
  89.               IF
  90. DUP SIZE 4 >
  91.               THEN
  92. FAC
  93. IF
  94. THEN 4 ROLL + +
  95. SWAP { 0 0 } SWAP +
  96. ELSE ROT SWAP +
  97. SWAP 1 +
  98. END
  99.               ELSE
  100. ROT + SWAP 0 SWAP +
  101.               END
  102.             END ROT
  103. DROP SWAP
  104.             IF DUP
  105. SIZE 4 >
  106.             THEN
  107. FAC
  108.             ELSE 0
  109.             END
  110.             IF
  111.             THEN 3
  112. PICK SYNK 5 ROLL +
  113. 4 ROLLD 5 ROLL + 4
  114. ROLLD SWAP SYNK ROT
  115. + SWAP ROT + SWAP
  116.             ELSE
  117. SWAP SYNK ROT +
  118. SWAP ROT + SWAP
  119.             END
  120.           END 3
  121. PICK
  122.         NEXT DROP
  123. ROT DROP DUP SIZE
  124. OVER OBJ\-> 1 SWAP
  125.         START +
  126.         NEXT DUP
  127.         \<<
  128. 1.46459188 \-> a v
  129.           \<< { } 1 a
  130.             START
  131. 'v' INCR +
  132.             NEXT
  133.           \>>
  134.         \>> EVAL 's1'
  135. PURGE b MATR
  136.       \>>
  137.     \>>
  138.   EXDEL
  139.     \<< 5 SF DEL
  140.     \>>
  141.   HELP
  142.     \<<
  143. "Partial Fractions V3.1
  144.  
  145. written by G. A. M. D.
  146.  
  147.      
  148. Press any key... 
  149. "
  150. 1 DISP
  151.       DO
  152.       UNTIL KEY
  153.       END DROP
  154. "Allowed factors in
  155. denominator:
  156. X , X^n , (X\177a)
  157. (X\177a)^n , (X^2\177a)
  158. (X^2\177a)^n, (X^2\177a*X\177b)
  159. (X^2\177a*X\177b)^n
  160.     "
  161. 1 DISP
  162.       DO
  163.       UNTIL KEY
  164.       END DROP
  165.     \>>
  166.   CST { DEL EXDEL
  167. HELP }
  168.   SYNK
  169.     \<< \-> u p
  170.       \<< { } 1 p
  171.         FOR x u x ^
  172. +
  173.         NEXT
  174.         IF u SIZE 3
  175. >
  176.         THEN 1
  177.         ELSE 0
  178.         END { } 1 p
  179.         START OVER
  180. +
  181.         NEXT SWAP
  182. DROP
  183.       \>>
  184.     \>>
  185.   MATR
  186.     \<< \-> r t z v b
  187.       \<< 1 z
  188.         FOR x v x
  189. GET 'X' STO b EVAL
  190.         NEXT z
  191. \->ARRY 1 z
  192.         FOR e v e
  193. GET 'X' STO 1 r
  194. SIZE
  195.           FOR c r c
  196. GET t c GET
  197.             \<< DUP
  198. EVAL INV SWAP EVAL
  199. INV X *
  200.             \>>
  201.             \<< EVAL
  202. INV
  203.             \>> IFTE
  204.           NEXT
  205.         NEXT { z z
  206. } \->ARRY 5 FS?C
  207.         \<< EXACT
  208.         \>>
  209.         \<< /
  210.         \>> IFTE 'X'
  211. PURGE ARRY\-> 1 GET
  212. \->LIST { } SWAP 1
  213. OVER SIZE
  214.         FOR x DUP
  215.           IF x GET
  216. ABS KZ <
  217.           THEN SWAP
  218. 0 +
  219.           ELSE SWAP
  220. OVER x GET 3 RND +
  221.           END SWAP
  222.         NEXT DROP 1
  223. 1 r SIZE
  224.         FOR x t x
  225. GET
  226.           \<< DUP2
  227. GET SWAP 1 + SWAP 3
  228. PICK 3 PICK GET 'X'
  229. * + r x GET / EVAL
  230. 3 ROLLD 1 +
  231.           \>>
  232.           \<< DUP2
  233. GET r x GET / EVAL
  234. 3 ROLLD 1 +
  235.           \>> IFTE
  236.         NEXT DROP2
  237. DEPTH 2 - 1 SWAP
  238.         START +
  239.         NEXT TICKS
  240. ROT - B\->R 8192 / 2
  241. RND SWAP
  242.       \>>
  243.     \>>
  244.   FAC
  245.     \<< \-> a
  246.       \<< "'" a 'X'
  247. QUAD \->STR 4 OVER
  248. SIZE SUB + STR\-> DUP
  249. 1 's1' STO EVAL
  250. SWAP 's1' SNEG EVAL
  251.         IF DUP TYPE
  252.         THEN DROP2
  253. a 0
  254.         ELSE 'X'
  255. SWAP - SWAP 'X'
  256. SWAP - 1
  257.         END
  258.       \>>
  259.     \>>
  260.   KZ .00001
  261.   EXACT
  262.     \<< DUP2 /
  263.       DO \-> b a z
  264.         \<< b a b a z
  265. RSD a / z + z
  266.         \>>
  267.       UNTIL OVER ==
  268.       END 3 ROLLD
  269. DROP2
  270.     \>>
  271. END
  272. -------------------------CUT---------------------------------------------
  273.  
  274.  
  275. Geir A. M. Drange
  276. BIH, Bergen, Norway
  277.  
  278. INTERNET:   el02@hp825.bih.no
  279.  
  280.  
  281.